package br.com.unifebe.tcc.model;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.HashSet;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "VENDA")
public class Venda implements Serializable{
  
	private static final long serialVersionUID = 1L;
	@Id
	@SequenceGenerator( name = "CD_VENDA", sequenceName = "VENDA_SEQ" )  
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "CD_VENDA" )  
	@Column(name = "CD_VENDA", nullable = false )
	private Long id;
	
	@Column(name = "VL_DESCONTO", precision = 25, scale = 4 )
	private BigDecimal valorDesconto;
	
	@Column(name = "VL_LIQUIDO", precision = 25, scale = 4 )
	private BigDecimal valorLiquido;
	
	@ManyToOne(fetch=FetchType.EAGER, optional=true)
    @JoinColumn(name="CD_CANCELAMENTO")
	private VendaCancelamento cancelamento;
	
	@ManyToOne(fetch=FetchType.EAGER, optional=false)
    @JoinColumn(name="CD_CLIENTE")
	private Cliente cliente;

//	@CollectionOfElements
	@OneToMany( mappedBy="venda")
	private Collection<VendaItem> itens;
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public VendaCancelamento getCancelamento() {
		return cancelamento;
	}

	public void setCancelamento(VendaCancelamento cancelamento) {
		this.cancelamento = cancelamento;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Collection<VendaItem> getItens() {
		if( itens == null ){
			itens = new HashSet<VendaItem>();
		}
		return itens;
	}

	public void setItens(Collection<VendaItem> itens) {
		this.itens = itens;
	}

	public BigDecimal getValorDesconto() {
		if( valorDesconto == null ){
			valorDesconto = BigDecimal.ZERO;
		}
		return valorDesconto;
	}

	public void setValorDesconto(BigDecimal valorDesconto) {
		this.valorDesconto = valorDesconto;
	}

	public BigDecimal getValorLiquido() {
		if( valorLiquido == null ){
			valorLiquido = BigDecimal.ZERO;
		}
		return valorLiquido;
	}

	public void setValorLiquido(BigDecimal valorLiquido) {
		this.valorLiquido = valorLiquido;
	}

	public boolean addItem( VendaItem item ) {
		if (getItens() == null) {
			setItens( new HashSet<VendaItem>() );
		}
		if ( !this.equals( item.getVenda() ) ) {
			if ( item.getVenda() != null ) {
				item.getVenda().getItens().remove( item );
			}
			item.setVenda( this );
		}
		return this.getItens().add( item );
	}
}
